/**
 * 转发 Hooks
 *
 * @author 济南晨霜信息技术有限公司
 * @mobile 18560000860 / 18754137913
 */
import {
    onShareAppMessage,
    onShareTimeline
} from "@dcloudio/uni-app";

/**
 *  转发给朋友、分享到朋友圈
 * @param {Object} appMessageConfig 转发给朋友的配置项
 * @param {Object} timelineConfig 分享到朋友圈的配置项
 * @returns {Object}
 *   - {Function} onShareAppMessage(options) 转发给朋友方法
 *      - @pram {Object} options 配置项
 *   - {Function} onShareTimeline(options) 分享到朋友圈方法
 *      - @pram {Object} options 配置项
 */
export function useShare(appMessageConfig = {}, timelineConfig = {}) {
    // 小程序 -> 转发给朋友 -> 默认配置
    let _appMessageOpts = {
        // 转发标题，默认为当前小程序名称
        title: "",
        // 转发路径，默认为当前页面 path ，必须是以 / 开头的完整路径
        path: "",
        // 自定义图片路径，可以是本地文件路径、代码包文件路径或者网络图片路径。
        // 支持PNG及JPG。显示图片长宽比是 5:4。
        // 默认使用默认截图
        imageUrl: "",
        // 如果该参数存在，则以 resolve 结果为准，如果三秒内不 resolve，分享会使用上面传入的默认参数
        promise: null,
        // 合并传递过来的配置项
        ...(appMessageConfig.value ?? appMessageConfig)
    };

    // 小程序 -> 分享到朋友圈 -> 默认配置
    let _timelineOpts = {
        // 自定义标题，即朋友圈列表页上显示的标题，默认为自定义标题，即朋友圈列表页上显示的标题
        title: "",
        // 自定义页面路径中携带的参数，如 path?a=1&b=2 的 “?” 后面部分
        // 默认为当前页面路径携带的参数
        query: "",
        // 自定义图片路径，可以是本地文件或者网络图片。支持 PNG 及 JPG，显示图片长宽比是 1:1
        // 默认使用小程序Logo
        imageUrl: "",
        // 合并传递过来的配置项
        ...(timelineConfig.value ?? timelineConfig)
    };

    /**
     * 重定义转发给朋友函数
     * @param {Object} options 配置项
     */
    const shareAppMessage = (options = {}) => {
        onShareAppMessage(() => {
            return {
                ..._appMessageOpts,
                ...(options?.value ?? options)
            };
        });
    };

    /**
     * 重定义分享到朋友圈函数
     * @param {Object} options 配置项
     */
    const shareTimeline = (options = {}) => {
        onShareTimeline(() => {
            return {
                ..._timelineOpts,
                ...(options?.value || options)
            };
        });
    };

    return {
        onShareAppMessage: shareAppMessage,
        onShareTimeline: shareTimeline
    };
}